Traditional software diagnostic tools, such as debuggers, profilers, and memory diagnostic tools, typically operate on a live, running process or a saved, heavyweight process state, such as a process dump file or historical trace. Live processes provide little or no historical context about how a process reached its current state. Process dump files, while verbose, are extremely heavyweight and time consuming to create and analyze.
It is common for software developers to analyze historical data during the diagnostic process. For instance, while debugging, developers may want inspect the process as it existed in previous states instead of a current state. For memory diagnostics, developers often want to see changes in a process's memory over time.
In both production and development scenarios, it is important to non-invasively and non-disruptively collect diagnostic data. In production, the diagnostic tools should have little or no impact on the production process and system. The collection of process state data using existing solutions may affect the process and system in an undesirable manner.